package com.eclink.asset.workflow.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.eclink.asset.domain.AuditConfigNode;
import com.eclink.asset.domain.AuditUser;
import com.eclink.asset.mapper.AuditConfigNodeMapper;
import com.eclink.asset.mapper.AuditUserMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 【请填写功能名称】Service业务层处理
 *
 *
 * @author zcc
 */
@Service
public class AuditConfigNodeService {


    @Resource
    private AuditConfigNodeMapper auditConfigNodeMapper;

    @Resource
    private AuditUserMapper auditUserMapper;

    /**
     * 查询【请填写功能名称】
     *
     * @param id 【请填写功能名称】主键
     * @return 【请填写功能名称】
     */
    public AuditConfigNode selectById(Integer id) {
        return auditConfigNodeMapper.selectById(id);
    }



    /**
     * 查询【请填写功能名称】列表
     *
     * @return 【请填写功能名称】
     */
    public List<AuditUser> listUser() {
        QueryWrapper<AuditUser> qw = new QueryWrapper<>();
        return auditUserMapper.selectList(qw);
    }

    /**
     * 查询【请填写功能名称】列表
     *
     * @param configId 节点所属的审核流程ID
     * @return 【请填写功能名称】
     */
    public List<AuditConfigNode> selectListAll(String configId) {

        QueryWrapper<AuditConfigNode> wrapper = new QueryWrapper<>();
        wrapper.eq("config_id", configId);
        wrapper.orderByDesc("create_time");
        List<AuditConfigNode> nodeList = auditConfigNodeMapper.selectList(wrapper);

        System.out.println(nodeList);

        return nodeList;
    }

    /**
     * 新增【请填写功能名称】
     *
     * @param auditConfigNode 【请填写功能名称】
     * @return 结果
     */
    public int insert(AuditConfigNode auditConfigNode) {
        auditConfigNode.setDelFlag(0);
        auditConfigNode.setCreateTime(LocalDateTime.now());
        return auditConfigNodeMapper.insert(auditConfigNode);
    }


    public void clearNodes(Long configId) {
        QueryWrapper<AuditConfigNode> wrapper = new QueryWrapper<>();
        wrapper.eq("config_id", configId);
        auditConfigNodeMapper.delete(wrapper);
    }

    /**
     * 更新审批流程的节点
     *
     * @param list 要更新的节点列表
     */
    @Transactional
    public void update(List<AuditConfigNode> list, Long configId) {
        clearNodes(configId);
        for(int i = 0;i<list.size();i++){
            AuditConfigNode node = list.get(i);
            node.setConfigId(configId);
            node.setStep(i+1);
        }
        auditConfigNodeMapper.insertBatch(list);

    }


    /**
     * 删除节点信息
     *
     * @param id 【请填写功能名称】主键
     * @return 结果
     */
    public int deleteById(Long id) {
        return auditConfigNodeMapper.deleteById(id);
    }
}
